home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / AMScen_0_9.lha / AMScen / proving3.m < prev    next >
Text File  |  1995-01-21  |  41KB  |  1,040 lines

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1995 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * proving3.m - caves level of the proving grounds.
  9.  */
  10.  
  11. private tp_proving3 CreateTable().
  12. use tp_proving3
  13.  
  14. define tp_proving proc monsterSet4(thing room)void:
  15.  
  16.     InitMonsterModels(room, 500);
  17.     AddPossibleMonster(room, m_hugeRat, 25);
  18.     AddPossibleMonster(room, m_hugeSnake, 25);
  19.     AddPossibleMonster(room, m_fighterGoblin, 25);
  20.     AddPossibleMonster(room, m_hugeSpider, 25);
  21.     AddPossibleMonster(room, m_troll, 25);
  22.     AddPossibleMonster(room, m_largeRat, 25);
  23.     AddPossibleMonster(room, m_largeSnake, 25);
  24.     AddPossibleMonster(room, m_goblin, 25);
  25. corp;
  26.  
  27. define tp_proving r_provingCave CreateThing(r_tunnel).
  28. r_provingCave@p_rDark := true.
  29. AutoGraphics(r_provingCave, AutoTunnels).
  30. AutoPens(r_provingCave, C_DARK_GREY, C_LIGHT_GREY, C_LIGHT_GREY, C_LIGHT_GREY).
  31. SetThingStatus(r_provingCave, ts_readonly).
  32. monsterSet4(r_provingCave).
  33.  
  34. define tp_proving3 r_sewerCave1 CreateThing(r_provingCave).
  35. SetupRoomP(r_sewerCave1, "in a rough cave passage leading to the northwest",
  36.     "You can climb a rock up through the cave roof here.").
  37. RoomName(r_sewerCave1, "Cave", "Passage").
  38. HUniConnect(r_sewerChamber2, r_sewerCave1, D_DOWN).
  39. UniConnect(r_sewerCave1, r_sewerChamber2, D_UP).
  40. r_sewerCave1@p_rUpMessage :=
  41.     "It's a bit of a scramble, but you are able to climb up the rock and "
  42.     "through a hole in the cave roof.".
  43. r_sewerCave1@p_rUpOMessage :=
  44.     "scrambles up a rock and through a hole in the cave roof.".
  45.  
  46. define tp_proving3 r_sewerCave2 CreateThing(r_provingCave).
  47. SetupRoomP(r_sewerCave2, "in a southwest/southeast cave passage corner", "").
  48. Connect(r_sewerCave1, r_sewerCave2, D_NORTHWEST).
  49. RoomName(r_sewerCave2, "Passage", "Corner").
  50.  
  51. define tp_proving3 r_sewerCave3 CreateThing(r_provingCave).
  52. SetupRoomP(r_sewerCave3, "in a rough cave passage leading to the northeast",
  53.     "A hole in the floor here leads down to a large cavern.").
  54. Connect(r_sewerCave2, r_sewerCave3, D_SOUTHWEST).
  55. RoomName(r_sewerCave3, "Cave", "Passage").
  56. r_sewerCave3@p_rDownMessage := "You drop down through the hole.".
  57. r_sewerCave3@p_rDownOMessage := "drops down through the hole.".
  58.  
  59. define tp_proving3 PR_CAVERN_ID NextEffectId().
  60. define tp_proving3 proc drawCavern()void:
  61.  
  62.     if not KnowsEffect(nil, PR_CAVERN_ID) then
  63.     DefineEffect(nil, PR_CAVERN_ID);
  64.     GSetImage(nil, "pr_cavern");
  65.     IfFound(nil);
  66.         GShowImage(nil, "", 0, 0, 160, 100, 0, 0);
  67.     Else(nil);
  68.         GSetPen(nil, C_DARK_GREY);
  69.         GAMove(nil, 0, 0);
  70.         GRectangle(nil, 159, 99, true);
  71.  
  72.         GSetPen(nil, C_LIGHT_GREY);
  73.         GPolygonStart(nil);
  74.         GAMove(nil, 25, 10);
  75.         GRDraw(nil, 52, 0);
  76.         GRDraw(nil, 0, -10);
  77.         GRDraw(nil, 6, 0);
  78.         GRDraw(nil, 0, 10);
  79.         GRDraw(nil, 52, 0);
  80.         GRDraw(nil, 15, 15);
  81.         GRDraw(nil, 0, 22);
  82.         GRDraw(nil, 9, 8);
  83.         GRDraw(nil, 0, 6);
  84.         GRDraw(nil, -9, -8);
  85.         GRDraw(nil, 0, 24);
  86.         GRDraw(nil, 9, 0);
  87.         GRDraw(nil, 0, 13);
  88.         GRDraw(nil, -134, 0);
  89.         GRDraw(nil, -15, -15);
  90.         GRDraw(nil, 0, -22);
  91.         GRDraw(nil, -10, 0);
  92.         GRDraw(nil, 0, -6);
  93.         GRDraw(nil, 10, 0);
  94.         GRDraw(nil, 0, -22);
  95.         GPolygonEnd(nil);
  96.  
  97.         GSetPen(nil, C_MEDIUM_GREY);
  98.         GAMove(nil, 60, 50);
  99.         GEllipse(nil, 20, 15, true);
  100.     Fi(nil);
  101.     EndEffect();
  102.     fi;
  103.     CallEffect(nil, PR_CAVERN_ID);
  104. corp;
  105.  
  106. define tp_proving3 CAVERN_MAP_GROUP NextMapGroup().
  107.  
  108. define tp_proving3 r_cavernModel CreateThing(r_tunnel).
  109. r_cavernModel@p_rName := "in a large cavern".
  110. r_cavernModel@p_rDark := true.
  111. r_cavernModel@p_rName1 := "Large".
  112. r_cavernModel@p_rName2 := "Cavern".
  113. r_cavernModel@p_MapGroup := CAVERN_MAP_GROUP.
  114. r_cavernModel@p_rDrawAction := drawCavern.
  115. r_cavernModel@p_rEnterRoomDraw := EnterRoomDraw.
  116. r_cavernModel@p_rLeaveRoomDraw := LeaveRoomDraw.
  117. Scenery(r_cavernModel, "boulder;large.slope;rock,strewn.rock.").
  118. monsterSet4(r_cavernModel).
  119. SetThingStatus(r_cavernModel, ts_readonly).
  120.  
  121. define tp_proving3 proc makeCavern(int x, y; string desc)thing:
  122.     thing cavern;
  123.  
  124.     cavern := CreateThing(r_cavernModel);
  125.     cavern@p_rDesc := desc;
  126.     cavern@p_rContents := CreateThingList();
  127.     cavern@p_rExits := CreateIntList();
  128.     cavern@p_rCursorX := x;
  129.     cavern@p_rCursorY := y;
  130.     SetThingStatus(cavern, ts_wizard);
  131.     cavern
  132. corp;
  133.  
  134. define tp_proving3 r_largeCavern1 makeCavern(134, 15,
  135.     "You can go down a rough, rock-strewn slope to the west, or along the "
  136.     "top of the slope to the south.").
  137. UniConnect(r_sewerCave3, r_largeCavern1, D_DOWN).
  138. HUniConnect(r_largeCavern1, r_sewerCave3, D_UP).
  139. r_largeCavern1@p_rUpMessage :=
  140.     "You are able to climb up on a rock and through a hole above.".
  141. r_largeCavern1@p_rUpOMessage := "climbs up a rock and disappears above it.".
  142.  
  143. define tp_proving3 r_largeCavern2 makeCavern(77, 15,
  144.     "You are in the middle of the northern wall of the cavern. The floor "
  145.     "slopes up to the east and down to the west, and you can also go across "
  146.     "the slope to the south. There is a fissure in the wall, into which "
  147.     "you can fit.").
  148. Connect(r_largeCavern1, r_largeCavern2, D_WEST).
  149. HConnect(r_largeCavern1, r_largeCavern2, D_DOWN).
  150. UniConnect(r_crawlway17, r_largeCavern2, D_DOWN).
  151. Scenery(r_largeCavern2, "fissure").
  152.  
  153. define tp_proving3 r_largeCavern3 makeCavern(21, 15,
  154.     "You are the bottom northwest corner of the cavern.").
  155. Connect(r_largeCavern2, r_largeCavern3, D_WEST).
  156. HConnect(r_largeCavern2, r_largeCavern3, D_DOWN).
  157.  
  158. define tp_proving3 r_largeCavern4 makeCavern(137, 47,
  159.     "You are in the middle of the upper, east wall of the cavern. A small "
  160.     "crawlway in the wall heads to the southeast.").
  161. Connect(r_largeCavern1, r_largeCavern4, D_SOUTH).
  162. Connect(r_largeCavern2, r_largeCavern4, D_SOUTHEAST).
  163. Scenery(r_largeCavern4, "crawlway").
  164.  
  165. define tp_proving3 r_largeCavern5 makeCavern(80, 47,
  166.     "You are in the middle of the cavern. From here, you can barely see the "
  167.     "walls, but the roof is clearly visible, since it slopes downward here. "
  168.     "You can climb on a large boulder here to get a better view.").
  169. Connect(r_largeCavern4, r_largeCavern5, D_WEST).
  170. HUniConnect(r_largeCavern4, r_largeCavern5, D_DOWN).
  171. Connect(r_largeCavern2, r_largeCavern5, D_SOUTH).
  172. Connect(r_largeCavern3, r_largeCavern5, D_SOUTHEAST).
  173. Connect(r_largeCavern1, r_largeCavern5, D_SOUTHWEST).
  174.  
  175. define tp_proving3 r_cavernBoulder makeCavern(58, 47,
  176.     "You have to crouch here since the cavern roof is quite low overhead. "
  177.     "You can't really see much more here than you could from beside the "
  178.     "boulder, but your added height does allow you to see a small passage "
  179.     "leading off from the northeast corner that should be reachable by "
  180.     "climbing a boulder there.").
  181. r_cavernBoulder@p_rName := "on a boulder in a large cavern".
  182. Connect(r_largeCavern5, r_cavernBoulder, D_UP).
  183.  
  184. define tp_proving3 r_largeCavern6 makeCavern(19, 47,
  185.     "You are in the middle of the lower, west wall of the cavern. A small "
  186.     "crawlway in the wall heads further west.").
  187. Connect(r_largeCavern5, r_largeCavern6, D_WEST).
  188. HConnect(r_largeCavern5, r_largeCavern6, D_DOWN).
  189. Connect(r_largeCavern3, r_largeCavern6, D_SOUTH).
  190. Connect(r_largeCavern2, r_largeCavern6, D_SOUTHWEST).
  191. Scenery(r_largeCavern6, "fissure").
  192.  
  193. define tp_proving3 r_largeCavern7 makeCavern(137, 80,
  194.     "You are in the upper southeast corner of the cavern. A large tunnel "
  195.     "heads further east.").
  196. Connect(r_largeCavern4, r_largeCavern7, D_SOUTH).
  197. Connect(r_largeCavern5, r_largeCavern7, D_SOUTHEAST).
  198. Scenery(r_largeCavern7, "tunnel;large").
  199.  
  200. define tp_proving3 r_largeCavern8 makeCavern(77, 80,
  201.     "You are in the middle of the southern wall of the cavern. The floor "
  202.     "slopes up to the east and down to the west and you can also go across "
  203.     "the slope to the north.").
  204. Connect(r_largeCavern7, r_largeCavern8, D_WEST).
  205. HConnect(r_largeCavern7, r_largeCavern8, D_DOWN).
  206. Connect(r_largeCavern5, r_largeCavern8, D_SOUTH).
  207. Connect(r_largeCavern4, r_largeCavern8, D_SOUTHWEST).
  208. Connect(r_largeCavern6, r_largeCavern8, D_SOUTHEAST).
  209.  
  210. define tp_proving3 r_largeCavern9 makeCavern(21, 80,
  211.     "You are in the lower southwest corner of the cavern.").
  212. Connect(r_largeCavern8, r_largeCavern9, D_WEST).
  213. HConnect(r_largeCavern8, r_largeCavern9, D_DOWN).
  214. Connect(r_largeCavern6, r_largeCavern9, D_SOUTH).
  215. Connect(r_largeCavern5, r_largeCavern9, D_SOUTHWEST).
  216.  
  217. define tp_proving3 r_sewerCave4 CreateThing(r_provingCave).
  218. SetupRoomP(r_sewerCave4, "in a small crawlway",
  219.     "The crawlway makes a tight bend, going northwest and north.").
  220. Connect(r_largeCavern4, r_sewerCave4, D_SOUTHEAST).
  221.  
  222. define tp_proving3 r_sewerCave5 CreateThing(r_provingCave).
  223. SetupRoomP(r_sewerCave5, "in a small crawlway",
  224.     "The crawlway makes a slight bend, going northwest and south.").
  225. Connect(r_sewerCave4, r_sewerCave5, D_NORTH).
  226.  
  227. define tp_proving3 r_sewerCave6 CreateThing(r_provingCave).
  228. SetupRoomP(r_sewerCave6, "at the end of a fissure",
  229.     "The fissue expands to the southwest, and a small crawlway near the "
  230.     "floor heads southeast.").
  231. Connect(r_sewerCave5, r_sewerCave6, D_NORTHWEST).
  232.  
  233. define tp_proving3 r_sewerCave7 CreateThing(r_provingCave).
  234. SetupRoomP(r_sewerCave7, "in a bend in a fissure",
  235.     "The fissure continues to the northeast and to the south.").
  236. Connect(r_sewerCave6, r_sewerCave7, D_SOUTHWEST).
  237. Connect(r_largeCavern2, r_sewerCave7, D_NORTH).
  238.  
  239. define tp_proving3 r_sewerCave8 CreateThing(r_provingCave).
  240. SetupRoomP(r_sewerCave8, "at a corner in a large tunnel",
  241.     "The tunnel makes a right-angle bend here, heading west and south.").
  242. Connect(r_largeCavern7, r_sewerCave8, D_EAST).
  243.  
  244. define tp_proving3 r_sewerCave9 CreateThing(r_provingCave).
  245. SetupRoomP(r_sewerCave9, "in a large north-south tunnel", "").
  246. Connect(r_sewerCave8, r_sewerCave9, D_SOUTH).
  247.  
  248. define tp_proving3 r_sewerCave10 CreateThing(r_provingCave).
  249. SetupRoomP(r_sewerCave10, "at a bend in a large tunnel",
  250.     "The tunnel leads north and southeast here.").
  251. Connect(r_sewerCave9, r_sewerCave10, D_SOUTH).
  252.  
  253. define tp_proving3 r_sewerCave11 CreateThing(r_provingCave).
  254. SetupRoomP(r_sewerCave11,
  255.     "in a chamber formed by the meeting of several passages",
  256.     "A large tunnel from the northwest bends back to the northeast here. "
  257.     "A smaller tunnel arrives from the west, and a hole in the floor heads "
  258.     "downward.").
  259. Connect(r_sewerCave10, r_sewerCave11, D_SOUTHEAST).
  260.  
  261. define tp_proving3 r_sewerCave12 CreateThing(r_provingCave).
  262. SetupRoomP(r_sewerCave12, "at a bend in a large tunnel",
  263.     "The tunnel leads north and southwest here.").
  264. Connect(r_sewerCave11, r_sewerCave12, D_NORTHEAST).
  265.  
  266. define tp_proving3 r_sewerCave13 CreateThing(r_provingCave).
  267. SetupRoomP(r_sewerCave13, "in a large north-south tunnel", "").
  268. Connect(r_sewerCave12, r_sewerCave13, D_NORTH).
  269.  
  270. define tp_proving3 r_sewerCave14 CreateThing(r_provingCave).
  271. SetupRoomP(r_sewerCave14, "in a small pit",
  272.     "A very tight tube wanders away to the northwest.").
  273. Connect(r_sewerCave11, r_sewerCave14, D_DOWN).
  274.  
  275. define tp_proving3 r_sewerCave15 CreateThing(r_provingCave).
  276. SetupRoomP(r_sewerCave15, "at the end of a high, wandering passage",
  277.     "The main passage from the west ends here, but there is very tight tube "
  278.     "wandering away to the southeast.").
  279. Connect(r_sewerCave14, r_sewerCave15, D_NORTHWEST).
  280.  
  281. define tp_proving3 r_sewerCave16 CreateThing(r_provingCave).
  282. SetupRoomP(r_sewerCave16, "in a high, wandering passage", "").
  283. Connect(r_sewerCave15, r_sewerCave16, D_WEST).
  284.  
  285. define tp_proving3 r_sewerCave17 CreateThing(r_provingCave).
  286. SetupRoomP(r_sewerCave17, "in a high, wandering passage",
  287.     "Handholds on one wall should allow you to climb up through a hole in "
  288.     "the roof of the passage here.").
  289. Connect(r_sewerCave16, r_sewerCave17, D_NORTHWEST).
  290.  
  291. define tp_proving3 r_sewerCave18 CreateThing(r_provingCave).
  292. SetupRoomP(r_sewerCave18, "at the end of a high, wandering passage",
  293.     "The main passage from the east ends here, but there is a passable crack "
  294.     "in the north wall, leading roughly northeastwards.").
  295. Connect(r_sewerCave17, r_sewerCave18, D_WEST).
  296.  
  297. define tp_proving3 r_sewerCave19 CreateThing(r_provingCave).
  298. SetupRoomP(r_sewerCave19, "in a long, narrow crack", "").
  299. Connect(r_sewerCave18, r_sewerCave19, D_NORTHEAST).
  300.  
  301. define tp_proving3 r_sewerCave20 CreateThing(r_provingCave).
  302. SetupRoomP(r_sewerCave20, "in a long, narrow crack", "").
  303. Connect(r_sewerCave19, r_sewerCave20, D_NORTH).
  304.  
  305. define tp_proving3 r_sewerCave21 CreateThing(r_provingCave).
  306. SetupRoomP(r_sewerCave21, "at the end of a long, narrow crack",
  307.     "The crack extends a long way to the south, but closes up here. A small "
  308.     "crawlway does lead to the east, however.").
  309. Connect(r_sewerCave20, r_sewerCave21, D_NORTH).
  310. Connect(r_largeCavern6, r_sewerCave21, D_WEST).
  311.  
  312. define tp_proving3 r_sewerCave22 CreateThing(r_provingCave).
  313. SetupRoomP(r_sewerCave22, "at a bend in a smallish tunnel",
  314.     "A larger area can be seen to the east, but to the south you just see "
  315.     "another corner.").
  316. Connect(r_sewerCave11, r_sewerCave22, D_WEST).
  317.  
  318. define tp_proving3 r_sewerCave23 CreateThing(r_provingCave).
  319. SetupRoomP(r_sewerCave23, "at a sharp corner in a smallish tunnel", "").
  320. Connect(r_sewerCave22, r_sewerCave23, D_SOUTH).
  321.  
  322. define tp_proving3 r_sewerCave24 CreateThing(r_provingCave).
  323. SetupRoomP(r_sewerCave24, "in a smallish tunnel running southeast-northwest",
  324.     "A small opening leads directly south.").
  325. Connect(r_sewerCave23, r_sewerCave24, D_NORTHWEST).
  326. RoomName(r_sewerCave24, "Tunnel", "").
  327.  
  328. define tp_proving3 r_sewerCave25 CreateThing(r_provingCave).
  329. SetupRoomP(r_sewerCave25, "at a bend in a smallish tunnel", "").
  330. Connect(r_sewerCave24, r_sewerCave25, D_NORTHWEST).
  331.  
  332. define tp_proving3 r_sewerCave26 CreateThing(r_provingCave).
  333. SetupRoomP(r_sewerCave26, "at a bend in a smallish tunnel", "").
  334. Connect(r_sewerCave25, r_sewerCave26, D_NORTH).
  335.  
  336. define tp_proving3 r_sewerCave27 CreateThing(r_provingCave).
  337. SetupRoomP(r_sewerCave27, "at the east end of a long, wide, low tunnel",
  338.     "A smallish tunnel heads off to the southeast.").
  339. Connect(r_sewerCave26, r_sewerCave27, D_NORTHEAST).
  340.  
  341. define tp_proving3 r_sewerCave28 CreateThing(r_provingCave).
  342. SetupRoomP(r_sewerCave28, "in a long, wide, low, east-west tunnel", "").
  343. Connect(r_sewerCave27, r_sewerCave28, D_WEST).
  344.  
  345. define tp_proving3 r_sewerCave29 CreateThing(r_provingCave).
  346. SetupRoomP(r_sewerCave29, "in a long, wide, low, east-west tunnel", "").
  347. Connect(r_sewerCave28, r_sewerCave29, D_WEST).
  348.  
  349. define tp_proving3 r_sewerCave30 CreateThing(r_provingCave).
  350. SetupRoomP(r_sewerCave30, "at the west end of a long, wide, low tunnel",
  351.     "A narrow passage heads north.").
  352. Connect(r_sewerCave29, r_sewerCave30, D_WEST).
  353.  
  354. define tp_proving3 r_sewerCave31 CreateThing(r_provingCave).
  355. SetupRoomP(r_sewerCave31, "in a narrow north-south passage",
  356.     "A large crack in the floor leads to a high passage below.").
  357. Connect(r_sewerCave30, r_sewerCave31, D_NORTH).
  358. Connect(r_sewerCave17, r_sewerCave31, D_UP).
  359.  
  360. define tp_proving3 r_sewerCave32 CreateThing(r_provingCave).
  361. SetupRoomP(r_sewerCave32,"at a south-east-west Tee in the narrow passage","").
  362. Connect(r_sewerCave31, r_sewerCave32, D_NORTH).
  363.  
  364. define tp_proving3 r_sewerCave33 CreateThing(r_provingCave).
  365. SetupRoomP(r_sewerCave33, "in a narrow east-west passage", "").
  366. Connect(r_sewerCave32, r_sewerCave33, D_EAST).
  367.  
  368. define tp_proving3 r_sewerCave34 CreateThing(r_provingCave).
  369. SetupRoomP(r_sewerCave34, "at a north to west corner in the narrow passage",
  370.     "").
  371. Connect(r_sewerCave33, r_sewerCave34, D_EAST).
  372.  
  373. define tp_proving3 r_sewerCave35 CreateThing(r_provingCave).
  374. SetupRoomP(r_sewerCave35, "on a narrow ledge",
  375.     "The ledge is about halfway up the south wall of a large cavern. You "
  376.     "can't see the far walls of the cavern from here, but you can make out a "
  377.     "large rock in the middle of it. A narrow passage heads south, but there "
  378.     "are no other exits. You can jump down to the cavern, but you would not "
  379.     "be able to get back up.").
  380. Connect(r_sewerCave34, r_sewerCave35, D_NORTH).
  381. UniConnect(r_sewerCave35, r_largeCavern8, D_DOWN).
  382. Scenery(r_sewerCave35,
  383.     "ledge;narrow.cavern;large.passage;narrow.rock;large").
  384.  
  385. define tp_proving3 r_spiderDen CreateThing(r_provingCave).
  386. SetupRoomP(r_spiderDen, "in the spider den",
  387.     "This medium-sized chamber is evidently the home of many of the large "
  388.     "spiders that populate the caves hereabouts. Large webs festoon the "
  389.     "walls and ceiling, with many hanging strands lower down. The air here "
  390.     "has a distinctly acidic tang to it. The bones of many small, and a few "
  391.     "not-so-small, animals litter the floor, often to a depth of several "
  392.     "inches.").
  393. Connect(r_sewerCave24, r_spiderDen, D_SOUTH).
  394. AutoGraphics(r_spiderDen, AutoTunnelChamber).
  395. RoomName(r_spiderDen, "Spider", "Den").
  396. Scenery(r_spiderDen,
  397.     "ceiling.wall."
  398.     "web,strand;large,spider,hanging."
  399.     "bone,litter;small,not-so-small,not,so-small").
  400. r_spiderDen@p_oSmellString :=
  401.     "The sharp smell of spiders is predominant here, but there is also a "
  402.     "noticeable component of decay, and another of dust.".
  403. define tp_proving3 o_spiderEgg CreateThing(nil).
  404. o_spiderEgg@p_oName := "egg;spider".
  405. o_spiderEgg@p_oDesc :=
  406.     "The spider egg is a white sphere about a foot in diameter. It is light "
  407.     "in weight, but feels solid inside. It's surface is smooth and shiny - "
  408.     "quite reminiscent of a pearl.".
  409. o_spiderEgg@p_oHome := r_lostAndFound.
  410. o_spiderEgg@p_oEatString :=
  411.     "The egg is too large for you to bite, let alone swallow whole. When "
  412.     "licked, it seems to absorb your saliva, but you notice nothing special "
  413.     "about its taste, which is a mixture of acidity and dust.".
  414. o_spiderEgg@p_oSmellString :=
  415.     "The egg has no strong smell - perhaps a touch of the spider's acid tang.".
  416. SetThingStatus(o_spiderEgg, ts_readonly).
  417. define tp_proving3 proc eggQuestDesc()string:
  418.     "Bring me a spider egg."
  419. corp;
  420. define tp_proving3 proc eggQuestGive()status:
  421.     thing egg;
  422.  
  423.     egg := It();
  424.     if Parent(egg) = o_spiderEgg then
  425.     GiveToQuestor("spider egg");
  426.     QuestThing@p_QuestActive := eggQuestGive;
  427.     succeed
  428.     elif egg@p_oName = "egg;spider" then
  429.     GiveToQuestor("spider egg");
  430.     QuestThing@p_QuestActive := eggQuestGive;
  431.     SPrint(TrueMe(), "Questor is not impressed.\n");
  432.     fail
  433.     else
  434.     continue
  435.     fi
  436. corp;
  437. define tp_proving3 proc eggQuestHint()string:
  438.     "Look beyond the dagger."
  439. corp;
  440. QuestGive("Egg", eggQuestDesc, eggQuestGive, eggQuestHint).
  441. r_spiderDen@p_rLastVisit := 0.
  442. define tp_proving3 proc spiderEnter(thing room)void:
  443.     thing me, sword;
  444.     int i, now, count;
  445.     list thing lt;
  446.  
  447.     now := Time();
  448.     me := Me();
  449.     if me@p_pStandard and now - r_spiderDen@p_rLastVisit >= 300 then
  450.     r_spiderDen@p_rLastVisit := now;
  451.     /* See the comment about the goblin dagger for why this is not a
  452.        perfect test. */
  453.     if not DoneQuest(eggQuestGive) and
  454.         CarryingChild(me, o_spiderEgg) = nil and
  455.         ChildHere(r_spiderDen, o_spiderEgg) = nil
  456.     then
  457.         DepositClone(r_spiderDen, o_spiderEgg);
  458.     fi;
  459.     for i from 0 upto Random(3) + 2 do
  460.         ignore CreateMonster(me, m_trackerSpider, r_spiderDen);
  461.     od;
  462.     lt := me@p_pCarrying;
  463.     count := Count(lt);
  464.     i := 0;
  465.     while i < count do
  466.         sword := lt[i];
  467.         if sword@p_oDamage >= o_longSword@p_oDamage then
  468.         i := count + 1;
  469.         else
  470.         i := i + 1;
  471.         fi;
  472.     od;
  473.     if i = count then
  474.         DepositClone(r_spiderDen, o_longSword);
  475.     fi;
  476.     fi;
  477. corp;
  478. AddAnyEnterAction(r_spiderDen, spiderEnter, false).
  479.  
  480. define tp_proving3 r_sewerCave36 CreateThing(r_provingCave).
  481. SetupRoomP(r_sewerCave36, "in a small chamber",
  482.     "Passages lead off in several directions.").
  483. Connect(r_sewerCave13, r_sewerCave36, D_NORTH).
  484. AutoGraphics(r_sewerCave36, AutoTunnelChamber).
  485.  
  486. define tp_proving3 r_sewerCave37 CreateThing(r_provingCave).
  487. SetupRoomP(r_sewerCave37, "in a passage junction", "").
  488. Connect(r_sewerCave36, r_sewerCave37, D_NORTHWEST).
  489.  
  490. define tp_proving3 r_sewerCave38 CreateThing(r_provingCave).
  491. SetupRoomP(r_sewerCave38, "in a northeast/southwest passage", "").
  492. Connect(r_sewerCave37, r_sewerCave38, D_NORTHEAST).
  493.  
  494. define tp_proving3 r_sewerCave39 CreateThing(r_provingCave).
  495. SetupRoomP(r_sewerCave39, "in a southwest/southeast passage", "").
  496. Connect(r_sewerCave38, r_sewerCave39, D_NORTHEAST).
  497.  
  498. define tp_proving3 r_sewerCave40 CreateThing(r_provingCave).
  499. SetupRoomP(r_sewerCave40, "in an east/northwest passage", "").
  500. Connect(r_sewerCave39, r_sewerCave40, D_SOUTHEAST).
  501.  
  502. define tp_proving3 r_sewerCave41 CreateThing(r_provingCave).
  503. SetupRoomP(r_sewerCave41, "in a north/south/west passage Tee", "").
  504. Connect(r_sewerCave40, r_sewerCave41, D_EAST).
  505.  
  506. define tp_proving3 r_sewerCave42 CreateThing(r_provingCave).
  507. SetupRoomP(r_sewerCave42, "at a west/south passage corner", "").
  508. Connect(r_sewerCave41, r_sewerCave42, D_NORTH).
  509.  
  510. define tp_proving3 r_sewerCave43 CreateThing(r_provingCave).
  511. SetupRoomP(r_sewerCave43, "at a passage dead-end", "").
  512. Connect(r_sewerCave42, r_sewerCave43, D_WEST).
  513.  
  514. define tp_proving3 r_sewerCave44 CreateThing(r_provingCave).
  515. SetupRoomP(r_sewerCave44, "in a passage crossing", "").
  516. Connect(r_sewerCave41, r_sewerCave44, D_SOUTH).
  517.  
  518. define tp_proving3 r_sewerCave45 CreateThing(r_provingCave).
  519. SetupRoomP(r_sewerCave45, "in a south/east/west passage Tee", "").
  520. Connect(r_sewerCave44, r_sewerCave45, D_WEST).
  521.  
  522. define tp_proving3 r_sewerCave46 CreateThing(r_provingCave).
  523. SetupRoomP(r_sewerCave46, "at a north/west passage corner", "").
  524. Connect(r_sewerCave45, r_sewerCave46, D_SOUTH).
  525.  
  526. define tp_proving3 r_sewerCave47 CreateThing(r_provingCave).
  527. SetupRoomP(r_sewerCave47, "in an east/west passage", "").
  528. Connect(r_sewerCave46, r_sewerCave47, D_WEST).
  529. Connect(r_sewerCave36, r_sewerCave47, D_EAST).
  530.  
  531. define tp_proving3 r_sewerCave48 CreateThing(r_provingCave).
  532. SetupRoomP(r_sewerCave48, "in an east/northwest passage", "").
  533. Connect(r_sewerCave36, r_sewerCave48, D_SOUTHEAST).
  534.  
  535. define tp_proving3 r_sewerCave49 CreateThing(r_provingCave).
  536. SetupRoomP(r_sewerCave49, "in a west/northeast passage", "").
  537. Connect(r_sewerCave48, r_sewerCave49, D_EAST).
  538.  
  539. define tp_proving3 r_sewerCave50 CreateThing(r_provingCave).
  540. SetupRoomP(r_sewerCave50, "in a north/south/southwest passage Tee", "").
  541. Connect(r_sewerCave49, r_sewerCave50, D_NORTHEAST).
  542. Connect(r_sewerCave44, r_sewerCave50, D_SOUTH).
  543.  
  544. define tp_proving3 r_sewerCave51 CreateThing(r_provingCave).
  545. SetupRoomP(r_sewerCave51, "in a north/east/southwest passage Tee", "").
  546. Connect(r_sewerCave50, r_sewerCave51, D_SOUTH).
  547.  
  548. define tp_proving3 r_sewerCave52 CreateThing(r_provingCave).
  549. SetupRoomP(r_sewerCave52, "in an east/west passage", "").
  550. Connect(r_sewerCave51, r_sewerCave52, D_EAST).
  551.  
  552. define tp_proving3 r_sewerCave53 CreateThing(r_provingCave).
  553. SetupRoomP(r_sewerCave53, "at a west/north passage corner", "").
  554. Connect(r_sewerCave52, r_sewerCave53, D_EAST).
  555.  
  556. define tp_proving3 r_sewerCave54 CreateThing(r_provingCave).
  557. SetupRoomP(r_sewerCave54, "in a northwest/south passage", "").
  558. Connect(r_sewerCave53, r_sewerCave54, D_NORTH).
  559.  
  560. define tp_proving3 r_sewerCave55 CreateThing(r_provingCave).
  561. SetupRoomP(r_sewerCave55, "in a west/northeast/southeast Tee", "").
  562. Connect(r_sewerCave54, r_sewerCave55, D_NORTHWEST).
  563. Connect(r_sewerCave44, r_sewerCave55, D_EAST).
  564.  
  565. define tp_proving3 r_sewerCave56 CreateThing(r_provingCave).
  566. SetupRoomP(r_sewerCave56, "in a north/southwest passage", "").
  567. Connect(r_sewerCave55, r_sewerCave56, D_NORTHEAST).
  568.  
  569. define tp_proving3 r_sewerCave57 CreateThing(r_provingCave).
  570. SetupRoomP(r_sewerCave57, "in a south/east passage junction",
  571.        "The east passage slopes gently upwards.").
  572. Connect(r_sewerCave56, r_sewerCave57, D_NORTH).
  573.  
  574. define tp_proving3 r_sewerCave58 CreateThing(r_provingCave).
  575. SetupRoomP(r_sewerCave58, "at a northeast/west passage corner", "").
  576. Connect(r_sewerCave51, r_sewerCave58, D_SOUTHWEST).
  577.  
  578. define tp_proving3 r_sewerCave59 CreateThing(r_provingCave).
  579. SetupRoomP(r_sewerCave59, "at the end of an east/west passage",
  580.     "A ladder leads upwards through a small hole").
  581. Connect(r_sewerCave58, r_sewerCave59, D_WEST).
  582. Scenery(r_sewerCave59, "ladder.hole;small").
  583.  
  584. define tp_proving3 r_sewerCave60 CreateThing(r_provingCave).
  585. SetupRoomP(r_sewerCave60, "in an east/west passage",
  586.     "A ladder leads downwards through a small hole.").
  587. Connect(r_sewerCave59, r_sewerCave60, D_UP).
  588. Scenery(r_sewerCave60, "ladder.hole;small").
  589.  
  590. define tp_proving3 r_sewerCave61 CreateThing(r_provingCave).
  591. SetupRoomP(r_sewerCave61, "in an east/west passage", "").
  592. Connect(r_sewerCave60, r_sewerCave61, D_WEST).
  593.  
  594. define tp_proving3 r_sewerCave62 CreateThing(r_provingCave).
  595. SetupRoomP(r_sewerCave62, "in an east/north-west bend in the passage",
  596.     "A ladder leads downwards through a small hole.").
  597. Connect(r_sewerCave61, r_sewerCave62, D_WEST).
  598. Scenery(r_sewerCave60, "ladder.hole;small").
  599.  
  600. define tp_proving3 r_sewerCave63 CreateThing(r_provingCave).
  601. SetupRoomP(r_sewerCave63, "at the end of a north/south passage",
  602.     "A ladder leads upwards through a small hole.").
  603. Connect(r_sewerCave62, r_sewerCave63, D_DOWN).
  604. Scenery(r_sewerCave59, "ladder.hole;small").
  605.  
  606. define tp_proving3 r_sewerCave64 CreateThing(r_provingCave).
  607. SetupRoomP(r_sewerCave64, "at an east/south passage corner", "").
  608. Connect(r_sewerCave63, r_sewerCave64, D_NORTH).
  609. Connect(r_sewerCave36, r_sewerCave64, D_WEST).
  610.  
  611. define tp_proving3 r_sewerCave65 CreateThing(r_provingCave).
  612. SetupRoomP(r_sewerCave65, "in an north/east/southwest passage Tee", "").
  613. Connect(r_sewerCave36, r_sewerCave65, D_NORTHEAST).
  614. Connect(r_sewerCave45, r_sewerCave65, D_WEST).
  615.  
  616. define tp_proving3 r_sewerCave66 CreateThing(r_provingCave).
  617. SetupRoomP(r_sewerCave66, "at the end of a north/south passage",
  618.     "A stone staircase leads upwards.").
  619. Connect(r_sewerCave65, r_sewerCave66, D_NORTH).
  620. Scenery(r_sewerCave66, "staircase;stone.stair;stone").
  621.  
  622. define tp_proving3 r_sewerCave67 CreateThing(r_provingCave).
  623. SetupRoomP(r_sewerCave67, "on a stone staircase", "").
  624. Connect(r_sewerCave66, r_sewerCave67, D_UP).
  625. Scenery(r_sewerCave67, "staircase;stone.stair;stone").
  626.  
  627. define tp_proving3 r_sewerCave68 CreateThing(r_provingTunnel1).
  628. SetupRoomDP(r_sewerCave68, "at the top of a stone staircase",
  629.     "There is a small iron grill on the west wall, through which you can see "
  630.     "a glimmer of light and a tunnel. You can see no way to get there, "
  631.     "but you do see a small hole in the stone, just below the grill. It "
  632.     "is too small to put your finger into, and it doesn't look like a "
  633.     "natural hole.").
  634. Connect(r_sewerCave67, r_sewerCave68, D_UP).
  635. Scenery(r_sewerCave68,
  636.     "staircase;stone.stair;stone."
  637.     "light;glimmer,of.glimmer."
  638.     "tunnel.").
  639. define tp_proving3 o_grill CreateThing(nil).
  640. FakeModel(o_grill, "grill;small,iron", "").
  641. define tp_proving3 proc grillDescribe()string:
  642.     string s;
  643.  
  644.     s := GetAgents(r_sewer6);
  645.     if s ~= "" then
  646.     "Through the grill you can see: " + GetAgents(r_sewer6)
  647.     else
  648.     "You can currently see nothing through the grill."
  649.     fi
  650. corp;
  651. o_grill@p_oDescAction := grillDescribe.
  652. AddTail(r_sewerCave68@p_rContents, o_grill).
  653. define tp_proving o_ironKey CreateThing(nil).
  654. o_ironKey@p_oName := "key;large,iron".
  655. o_ironKey@p_oDesc :=
  656.     "The key is of simple construction, consisting of a long round shaft, a "
  657.     "crosspiece at one end for turning it, and 3 finger rods at the other.".
  658. SetThingStatus(o_ironKey, ts_readonly).
  659. o_ironKey@p_oHome := r_garbageRoom.
  660. define tp_proving3 o_keyHole1 CreateThing(nil).
  661. FakeObject(o_keyHole1, r_sewerCave68, "hole,keyhole;small,round", "").
  662. o_keyHole1@p_oContents := CreateThingList().
  663. define tp_proving3 proc putInKeyHole1(thing key, keyhole)status:
  664.     string name;
  665.     bool hidden;
  666.  
  667.     if Parent(key) = o_ironKey then
  668.     name := Me()@p_pName;
  669.     hidden := Me()@p_pHidden;
  670.     Print("The iron key slips into the hole and turns easily. A section "
  671.         "of the wall pivots out of the way and you walk through "
  672.         "into the sewer.\n");
  673.     if hidden then
  674.         OPrint("A section of the east wall pivots open, then quickly "
  675.         "closes again.\n");
  676.     else
  677.         OPrint(name + " does something to the east wall, and a section of "
  678.         "it opens up, and " + name + " walks through. The wall "
  679.         "then closes again before anyone can follow.\n");
  680.     fi;
  681.     LeaveRoomStuff(r_sewer6, D_EAST, MOVE_SPECIAL);
  682.     EnterRoomStuff(r_sewer6, D_WEST, MOVE_SPECIAL);
  683.     if hidden then
  684.         OPrint("A section of the west wall pivots open, then quickly "
  685.         "closes again.\n");
  686.     else
  687.         OPrint("A section of the west wall pivots open and " + name +
  688.         "emerges. The wall quickly closes again.\n");
  689.     fi;
  690.     succeed
  691.     else
  692.     Print("The " + FormatName(key@p_oName) +
  693.         " will not fit into the hole.\n");
  694.     fail
  695.     fi
  696. corp;
  697. o_keyHole1@p_oPutInMeChecker := putInKeyHole1.
  698. define tp_proving3 proc doUnlock1(thing keyhole, key)status:
  699.     putInKeyHole1(key, keyhole)
  700. corp;
  701. o_keyHole1@p_oUnlockMeWithChecker := doUnlock1.
  702. SetThingStatus(o_keyHole1, ts_readonly).
  703.  
  704. define tp_proving3 p_mPath CreateStringProp().
  705. define tp_proving3 p_mPathIndex CreateIntProp().
  706. define tp_proving3 p_mWasForced CreateBoolProp().
  707.  
  708. define tp_proving3 RockPile CreateThing(nil).
  709.  
  710. RockPile@p_mPath := "nwnenesee s w w swsee nes e e n nww w s w w ".
  711. RockPile@p_mPathIndex := 0.
  712. RockPile@p_mWasForced := false.
  713. RockPile@p_pHitMax := 10.
  714. RockPile@p_pHitNow := 10.
  715.  
  716. define tp_proving3 proc rockPileStep()void:
  717.     thing here, me;
  718.     int now, max, index, dir, i, d;
  719.     string path;
  720.     list int exits;
  721.  
  722.     me := Me();
  723.     if not me@p_mWasForced then
  724.     now := me@p_pHitNow;
  725.     max := me@p_pHitMax;
  726.     if now >= max - 1 then
  727.         here := Here();
  728.         path := me@p_mPath;
  729.         index := me@p_mPathIndex;
  730.         if index = Length(path) then
  731.         index := 0;
  732.         fi;
  733.         dir := PairToDir(SubString(path, index, 2));
  734.         path := DirName(dir);
  735.         if LightAt(here) then
  736.         OPrint("With a loud grinding noise, the rock pile leaves to " +
  737.             path + ".\n");
  738.         ForEachAgent(here, UnShowIconOnce);
  739.         else
  740.         OPrint("A loud grinding noise starts and receeds to " + path +
  741.             ".\n");
  742.         fi;
  743.         exits := here@p_rExits;
  744.         for i from 0 upto Count(exits) - 1 do
  745.         d := exits[i];
  746.         if d ~= dir then
  747.             ABPrint(here@(DirProp(d)), nil, nil,
  748.             "You hear a grinding sound coming from " +
  749.             DirName(DirBack(d)) + ".\n");
  750.         fi;
  751.         od;
  752.         here := here@(DirProp(dir));
  753.         SetLocation(here);
  754.         dir := DirBack(dir);
  755.         path := DirName(dir);
  756.         if LightAt(here) then
  757.         OPrint(
  758.             "With a loud grinding noise, the rock pile arrives from " +
  759.             path + ".\n");
  760.         ForEachAgent(here, ShowIconOnce);
  761.         else
  762.         OPrint("A loud grinding noise starts from " + path +
  763.             ", comes quite close, then stops.\n");
  764.         fi;
  765.         exits := here@p_rExits;
  766.         for i from 0 upto Count(exits) - 1 do
  767.         d := exits[i];
  768.         if d ~= dir then
  769.             ABPrint(here@(DirProp(d)), nil, nil,
  770.             "You hear a grinding sound coming from " +
  771.             DirName(DirBack(d)) + ".\n");
  772.         fi;
  773.         od;
  774.         me@p_mPathIndex := index + 2;
  775.     fi;
  776.     if now < max then
  777.         me@p_pHitNow := now + 1;
  778.     fi;
  779.     After(60, rockPileStep);
  780.     fi;
  781.     me@p_mWasForced := false;
  782. corp;
  783.  
  784. define tp_proving3 proc forceStep()status:
  785.     rockPileStep();
  786.     Me()@p_mWasForced := true;
  787.     After(60, rockPileStep);
  788.     continue
  789. corp;
  790.  
  791. define tp_proving3 proc rockPileFight(thing rockPile)void:
  792.     thing attacker, here, weapon, key;
  793.     string weaponName;
  794.     int hitMax, hitNow;
  795.  
  796.     attacker := Me();
  797.     here := Here();
  798.     weapon := attacker@p_pWeapon;
  799.     weaponName := FormatName(weapon@p_oName);
  800.     if IsAncestor(weapon, o_stiletto) then
  801.     hitMax := rockPile@p_pHitMax;
  802.     hitNow := rockPile@p_pHitNow;
  803.     Print("The stiletto is able to slip between a pair of the close "
  804.         "fitting rocks making up the rock pile. ");
  805.     if hitNow >= hitMax - 1 then
  806.         ignore ForceAction(rockPile, forceStep);
  807.         rockPile@p_pHitNow := hitNow - 2;
  808.         if not FindChildOnList(here@p_rContents, o_ironKey) and
  809.         not FindChildOnList(attacker@p_pCarrying, o_ironKey)
  810.         then
  811.         Print("Tinkle.\n");
  812.         OPrint("Tinkle.\n");
  813.         key := CreateThing(o_ironKey);
  814.         SetThingStatus(key, ts_wizard);
  815.         GiveThing(key, SysAdmin);
  816.         AddTail(here@p_rContents, key);
  817.         key@p_oCreator := attacker;
  818.         key@p_oWhere := here;
  819.         fi;
  820.     elif hitNow >= hitMax / 2 then
  821.         rockPile@p_pHitNow := hitNow - 1;
  822.         Print("The rock pile shakes violently.\n");
  823.     elif hitNow ~= 0 then
  824.         rockPile@p_pHitNow := hitNow - 1;
  825.         Print("The rock pile quivers gently.\n");
  826.     else
  827.         Print("The rock pile does not react.\n");
  828.     fi;
  829.     elif IsAncestor(weapon, o_shortSword) or
  830.     IsAncestor(weapon, o_longSword) or
  831.     IsAncestor(weapon, o_twoHandedSword)
  832.     then
  833.     if Parent(weapon) = nil or
  834.         weapon@p_oDamage < Parent(weapon)@p_oDamage / 2
  835.     then
  836.         Print("You bang away at the rock pile with your " + weaponName +
  837.         ", but nothing much happens.\n");
  838.     else
  839.         weapon@p_oDamage := weapon@p_oDamage - 1;
  840.         Print("Banging on rocks with your " + weaponName +
  841.         " is not a good idea - you have blunted it!\n");
  842.     fi;
  843.     else
  844.     Print("You pound on the rock pile with your " + weaponName +
  845.         ", but there is no noticeable effect.\n");
  846.     fi;
  847.     OPrint(attacker@p_pName + " attacks the rock pile.\n");
  848. corp;
  849.  
  850. RockPile@p_mFightAction := rockPileFight.
  851.  
  852. define tp_proving3 proc rockPilePre()status:
  853.  
  854.     SPrint(TrueMe(), "You can't give things to the rock pile.\n");
  855.     fail
  856. corp;
  857.  
  858. define tp_proving3 proc rockPileCreate()void:
  859.  
  860.     SetupMachine(RockPile);
  861.     RockPile@p_pDesc :=
  862. "The rock pile looks to be just that - a pile of rocks. The individual rocks "
  863. "do fit together quite well however - there is barely room for a small blade "
  864. "between any of them. Overall, it is about 3 feet high and 4 feet across, in "
  865. "a generally rocky grey colour.";
  866.     CreateMachine("pile;rock.rockpile", RockPile, r_sewerCave36, rockPileStep);
  867.     ignore SetMachineActive(RockPile, rockPileStep);
  868.     GNewIcon(RockPile, makeRockPileIcon());
  869.     RockPile@p_pGivePre := rockPilePre;
  870. corp;
  871. rockPileCreate().
  872. ignore DeleteSymbol(tp_proving3, "rockPileCreate").
  873.  
  874. define tp_proving3 r_sewerCaveA1 CreateThing(r_provingCave).
  875. SetupRoomP(r_sewerCaveA1, "in a narrow east-west passage", "").
  876. Connect(r_sewerCave32, r_sewerCaveA1, D_WEST).
  877.  
  878. define tp_proving r_sewerCaveA2 CreateThing(r_provingCave).
  879. SetupRoomP(r_sewerCaveA2, "in a narrow east-west passage", "").
  880. Connect(r_sewerCaveA1, r_sewerCaveA2, D_WEST).
  881.  
  882. define tp_proving3 r_sewerCave70 CreateThing(r_provingCave).
  883. SetupRoomP(r_sewerCave70, "at a sharp west/north-west corner", "").
  884. Connect(r_sewerCave60, r_sewerCave70, D_EAST).
  885.  
  886. define tp_proving3 r_sewerCave71 CreateThing(r_provingCave).
  887. SetupRoomP(r_sewerCave71, "at a north/west/south-east junction", "").
  888. Connect(r_sewerCave70, r_sewerCave71, D_NORTHWEST).
  889.  
  890. define tp_proving3 r_sewerCave72 CreateThing(r_provingCave).
  891. SetupRoomP(r_sewerCave72, "at a north-east/north-west/south junction", "").
  892. Connect(r_sewerCave71, r_sewerCave72, D_NORTH).
  893.  
  894. define tp_proving3 r_sewerCave73 CreateThing(r_provingCave).
  895. SetupRoomP(r_sewerCave73, "at a north/east/south-west junction", "").
  896. Connect(r_sewerCave72, r_sewerCave73, D_NORTHEAST).
  897.  
  898. define tp_proving3 r_sewerCave74 CreateThing(r_provingCave).
  899. SetupRoomP(r_sewerCave74, "at a tight west/north-west bend", "").
  900. Connect(r_sewerCave73, r_sewerCave74, D_EAST).
  901.  
  902. define tp_proving3 r_sewerCave75 CreateThing(r_provingCave).
  903. SetupRoomP(r_sewerCave75, "at an east/north-west passage bend", "").
  904. Connect(r_sewerCave71, r_sewerCave75, D_WEST).
  905.  
  906. define tp_proving3 r_sewerCave76 CreateThing(r_provingCave).
  907. SetupRoomP(r_sewerCave76, "at a north/west/south-east passage junction", "").
  908. Connect(r_sewerCave75, r_sewerCave76, D_NORTHWEST).
  909.  
  910. define tp_proving3 r_sewerCave77 CreateThing(r_provingCave).
  911. SetupRoomP(r_sewerCave77, "at a dead-end", "").
  912. Connect(r_sewerCave76, r_sewerCave77, D_WEST).
  913.  
  914. define tp_proving3 r_sewerCave78 CreateThing(r_provingCave).
  915. SetupRoomP(r_sewerCave78, "at a north-east/south passage bend",
  916.        "A side passage heads south-west.").
  917. Connect(r_sewerCave76, r_sewerCave78, D_NORTH).
  918.  
  919. define tp_proving3 r_sewerCave79 CreateThing(r_provingCave).
  920. SetupRoomP(r_sewerCave79, "at a dead-end", "").
  921. Connect(r_sewerCave78, r_sewerCave79, D_SOUTHWEST).
  922. r_sewerCave79@p_rLastVisit := 0.
  923. define tp_proving3 proc cave79Enter(thing room)void:
  924.     thing me, weapon;
  925.     int i, now;
  926.  
  927.     now := Time();
  928.     me := Me();
  929.     if me@p_pStandard and now - r_sewerCave79@p_rLastVisit >= 300 then
  930.     r_sewerCave79@p_rLastVisit := now;
  931.     for i from 0 upto 2 do
  932.         ignore CreateMonster(me, m_hugeSpider, r_sewerCave79);
  933.     od;
  934.     weapon := me@p_pWeapon;
  935.     if weapon ~= nil and weapon@p_oDamage < o_goblinSword@p_oDamage then
  936.         DepositClone(r_sewerCave79, o_goblinSword);
  937.     fi;
  938.     fi;
  939. corp;
  940. AddAnyEnterAction(r_sewerCave79, cave79Enter, false).
  941.  
  942. define tp_proving3 r_sewerCave80 CreateThing(r_provingCave).
  943. SetupRoomP(r_sewerCave80, "at a south-east/south-west passage corner", "").
  944. Connect(r_sewerCave78, r_sewerCave80, D_NORTHEAST).
  945. Connect(r_sewerCave74, r_sewerCave80, D_NORTHWEST).
  946.  
  947. define tp_proving3 r_sewerCave81 CreateThing(r_provingCave).
  948. SetupRoomP(r_sewerCave81, "in a north-west/south-east passage",
  949.        "A branch passage heads south.").
  950. Connect(r_sewerCave72, r_sewerCave81, D_NORTHWEST).
  951.  
  952. define tp_proving3 r_sewerCave82 CreateThing(r_provingCave).
  953. SetupRoomP(r_sewerCave82, "at a dead-end", "").
  954. Connect(r_sewerCave81, r_sewerCave82, D_SOUTH).
  955.  
  956. define tp_proving3 r_sewerCave83 CreateThing(r_provingCave).
  957. SetupRoomP(r_sewerCave83, "in a north/south passage", "").
  958. Connect(r_sewerCave73, r_sewerCave83, D_NORTH).
  959.  
  960. define tp_proving3 r_sewerCave84 CreateThing(r_provingCave).
  961. SetupRoomP(r_sewerCave84, "at an east/west/south passage tee", "").
  962. Connect(r_sewerCave83, r_sewerCave84, D_NORTH).
  963.  
  964. define tp_proving3 r_sewerCave85 CreateThing(r_provingCave).
  965. SetupRoomP(r_sewerCave85, "at a north/west passage corner",
  966.        "The north passage slopes gently downwards.").
  967. Connect(r_sewerCave84, r_sewerCave85, D_EAST).
  968.  
  969. define tp_proving3 r_sewerCave86 CreateThing(r_provingCave).
  970. SetupRoomP(r_sewerCave86, "at a south/west corner in the sloping passage", "").
  971. Connect(r_sewerCave85, r_sewerCave86, D_NORTH).
  972. Connect(r_sewerCave85, r_sewerCave86, D_DOWN).
  973. Connect(r_sewerCave57, r_sewerCave86, D_EAST).
  974. Connect(r_sewerCave57, r_sewerCave86, D_UP).
  975. RoomName(r_sewerCave86, "Sloping", "Corner").
  976.  
  977. define tp_proving3 r_sewerCave87 CreateThing(r_provingCave).
  978. SetupRoomP(r_sewerCave87, "in an east-west tunnel passage",
  979.        "A branch passage heads to the north-west.").
  980. Connect(r_sewerCave84, r_sewerCave87, D_WEST).
  981.  
  982. define tp_proving3 r_sewerCave88 CreateThing(r_provingCave).
  983. SetupRoomP(r_sewerCave88, "at a south/east passage corner", "").
  984. Connect(r_sewerCave87, r_sewerCave88, D_WEST).
  985.  
  986. define tp_proving3 r_sewerCave89 CreateThing(r_provingCave).
  987. SetupRoomP(r_sewerCave89, "at a junction of several passages", "").
  988. Connect(r_sewerCave81, r_sewerCave89, D_NORTHWEST).
  989. Connect(r_sewerCave88, r_sewerCave89, D_SOUTH).
  990. r_sewerCave89@p_rName1 := "Junction".
  991.  
  992. define tp_proving3 r_sewerCave90 CreateThing(r_provingCave).
  993. SetupRoomP(r_sewerCave90, "at a gentle north-east/south passage corner", "").
  994. Connect(r_sewerCave89, r_sewerCave90, D_SOUTHWEST).
  995.  
  996. define tp_proving3 r_sewerCave91 CreateThing(r_provingCave).
  997. SetupRoomP(r_sewerCave91, "in a north-south tunnel passage",
  998.        "A branch passage heads to the west.").
  999. Connect(r_sewerCave90, r_sewerCave91, D_SOUTH).
  1000.  
  1001. define tp_proving3 r_sewerCave92 CreateThing(r_provingCave).
  1002. SetupRoomP(r_sewerCave92, "at a gentle north/south-east passage corner", "").
  1003. Connect(r_sewerCave62, r_sewerCave92, D_NORTHWEST).
  1004. Connect(r_sewerCave91, r_sewerCave92, D_SOUTH).
  1005.  
  1006. define tp_proving3 r_sewerCave93 CreateThing(r_provingCave).
  1007. SetupRoomP(r_sewerCave93, "at a north/east tunnel passage corner",
  1008.        "The north passage slopes gently downwards.").
  1009. Connect(r_sewerCave91, r_sewerCave93, D_WEST).
  1010.  
  1011. define tp_proving3 r_sewerCave94 CreateThing(r_provingCave).
  1012. SetupRoomP(r_sewerCave94, "at a hairpin bend in the tunnel passage",
  1013.        "Both passages lead south, but one slopes upwards and one slopes "
  1014.        "downwards.").
  1015. Connect(r_sewerCave93, r_sewerCave94, D_DOWN).
  1016. UniConnect(r_sewerCave93, r_sewerCave94, D_NORTH).
  1017. r_sewerCave94@p_rName1 := "Hairpin".
  1018.  
  1019. define tp_proving3 r_sewerCave95 CreateThing(r_provingCave).
  1020. SetupRoomP(r_sewerCave95, "at a north/east passage corner",
  1021.        "The north passage slopes gently upwards.").
  1022. Connect(r_sewerCave94, r_sewerCave95, D_DOWN).
  1023. Connect(r_sewerCave37, r_sewerCave95, D_WEST).
  1024. UniConnect(r_sewerCave95, r_sewerCave94, D_NORTH).
  1025.  
  1026. define tp_proving3 r_sewerCave96 CreateThing(r_provingCave).
  1027. SetupRoomP(r_sewerCave96, "at a north/east passage corner", "").
  1028. Connect(r_sewerCave89, r_sewerCave96, D_WEST).
  1029.  
  1030. define tp_proving3 r_sewerCave97 CreateThing(r_provingCave).
  1031. SetupRoomP(r_sewerCave97, "at a gentle south/north-east passage bend", "").
  1032. Connect(r_sewerCave96, r_sewerCave97, D_NORTH).
  1033.  
  1034. define tp_proving3 r_sewerCave98 CreateThing(r_provingCave).
  1035. SetupRoomP(r_sewerCave98, "at a south-west/south-east passage corner", "").
  1036. Connect(r_sewerCave97, r_sewerCave98, D_NORTHEAST).
  1037. Connect(r_sewerCave87, r_sewerCave98, D_NORTHWEST).
  1038.  
  1039. unuse tp_proving3
  1040.